package com.limou.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.limou.mapper.ProductMapper;
import com.limou.pojo.Product;
import com.limou.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProductServiceImpl implements ProductService {

    @Autowired
    private ProductMapper productMapper;

    @Override
    public List<Product> list() {
        return productMapper.list();
    }

    @Override
    public List<Product> queryProductByName(String name) {
        // 如果用户在搜索框中未输入值，那么就去查询所有
        if (name.equals("")) {
            return productMapper.list();
        }
        // 否则调用条件查询
        return productMapper.queryProductByName(name);
    }

    @Override
    public Product queryProductById(Integer productId) {
        return productMapper.queryProductById(productId);
    }

    @Override
    public void updateProduct(Product product) {
        productMapper.updateProduct(product);
    }

    @Override
    public void deleteProductById(String productId) {
        productMapper.deleteProductById(productId);
    }

    @Override
    public void addProduct(Product product) {
        productMapper.addProduct(product);
    }


    /**
     * 分页功能的实现(所有上架的商品)
     * @param pageNum
     * @return
     */
    @Override
    public PageInfo<Product> getProductPageStatus(Integer pageNum) {
        // 在查询所有商品之前开启分页功能
        // 需要传递两个参数
        // （1）当前页的页码pageNum，由前端页面传入 （2）每页显示的条数pageSize----> 4
        PageHelper.startPage(pageNum, 4);

        // 查询所有上架商品的集合
        List<Product> list = productMapper.listStatus();

        // 获取分页相关数据
        // 需要两个参数
        // （1）所有商品的集合list
        // （2）分页底下页码显示的个数（导航分页），填5表示以当前页码为圆点，显示前两个和后两个
        PageInfo<Product> page = new PageInfo<>(list, 5);

        return page;
    }

    /**
     * 分页功能的实现(所有商品)
     * @param pageNum
     * @return
     */
    @Override
    public PageInfo<Product> getProductPage(Integer pageNum) {
        // 在查询所有商品之前开启分页功能
        // 需要传递两个参数
        // （1）当前页的页码pageNum，由前端页面传入 （2）每页显示的条数pageSize----> 4
        PageHelper.startPage(pageNum, 4);

        // 查询所有商品的集合
        List<Product> list = productMapper.list();

        // 获取分页相关数据
        // 需要两个参数
        // （1）所有商品的集合list
        // （2）分页底下页码显示的个数（导航分页），填5表示以当前页码为圆点，显示前两个和后两个
        PageInfo<Product> page = new PageInfo<>(list, 5);

        return page;
    }

    /**
     * 分页功能的实现(查询商品)
     * @param pageNum
     * @return
     */

    // 用来暂存商品名称，除了第一次访问该页面商品名称有值外，后续访问均没有携带商品名称
    // 所以需要一个全局变量暂存商品名称
    private String productName;

    @Override
    public PageInfo<Product> getProductPageByCondition(Integer pageNum, String productName) {
        // 在查询所有商品之前开启分页功能
        // 需要传递两个参数
        // （1）当前页的页码pageNum，由前端页面传入 （2）每页显示的条数pageSize----> 4
        PageHelper.startPage(pageNum, 4);

        // 当非第一次访问时，productName均等于null，不会改变全局变量的值
        // 当输入框值改变时，会进入该判断去更新全局变量的值
        if(productName != null){
            this.productName = productName;
        }

        List<Product> list = null;
        // 如果传参为空
        if ("".equals(productName)) {  // 避免空指针
            list = productMapper.list();
        }else {
            // 根据条件查询商品的集合
            list = productMapper.queryProductByName(this.productName);
        }

        // 获取分页相关数据
        // 需要两个参数
        // （1）所有商品的集合list
        // （2）分页底下页码显示的个数（导航分页），填5表示以当前页码为圆点，显示前两个和后两个
        PageInfo<Product> page = new PageInfo<>(list, 5);

        return page;
    }

    @Override
    public void subProductStock(Integer productId) {
        productMapper.subProductStock(productId);
    }

    @Override
    public void addProductStock(Integer productId) {
        productMapper.addProductStock(productId);
    }
}
